Static variables of a class |
Each object of a class has its own member variables, and these variables cannot be seen or altered by other objects of the same class. A static variable of a class is a variable that is shared by all objects of the same class. A member static variable allows sharing resources among objects of the same class, for instance in the following problem when the number of connections is zero it is possible to allocate a matrix with data that all MyConnections object shares; when the last object of this class is destroyed (count = 0) this data matrix must be destroyed. Cada objeto de una clase tiene sus propias variables miembro, y estas variables no pueden ser vistas o alteradas por otros objetos de la misma clase. Una variable estática de una clase es una variable que es compartida por todos los objetos de la misma clase. Las variables estáticas miembros permiten compartir recursos entre los objetos de una clase, por ejemplo en el programa siguiente cuando el número de conexiones es cero se puede crear una matriz de datos que todos los objetos de MyConnection comparten; cuando el último objeto de esta clase se destruye (count = 0) esta matriz de datos se debe destruir. |
Problem 1 |
Add the MyConnection class to the Space program. All MyConnection objects must know the number of objects created of this class. Agregue la clase MyConnection al programa Space. Todos los objetos MyConnection deben conocer el número de objetos creados de esta clase. |
MyConnection.h |
#pragma once class MyConnection { public: MyConnection(void); ~MyConnection(void); static int count; }; |
MyConnection.cpp |
#include "StdAfx.h" #include "MyConnection.h" int MyConnection::count = 0; MyConnection::MyConnection(void) { // if (count == 0) //{ // Build something for all objects //} count++; } MyConnection::~MyConnection(void) { count--; // if (count == 0) //{ // Destroy data shared by all objects //} } |
Space.cpp |
... void Space::Window_Open(Win::Event& e) { MyConnection x, y; tbxOutput.Text += Sys::Convert::ToString(x.count); tbxOutput.Text += L", "; tbxOutput.Text += Sys::Convert::ToString(y.count); tbxOutput.Text += L", "; if (5 > 0) { MyConnection z; tbxOutput.Text += Sys::Convert::ToString(x.count); tbxOutput.Text += L", "; } tbxOutput.Text += Sys::Convert::ToString(y.count); tbxOutput.Text += L", "; MyConnection z[10]; tbxOutput.Text += Sys::Convert::ToString(z[5].count); } |
Tip |
A static member variable CANNOT be initialized in the constructor; it must be initialized as shown in the previous code. Una variable estática NO PUEDE inicializarse en el constructor; ésta debe ser inicializada como se muestra en el código previo. |
Static functions of a class |
A static function of a class:
Una función estática de una clase:
|
Problem 2 |
Add the IsOpen() static function to the class MyConnection as shown. The function must return true, if there is one or more objects created. Note how static functions are called. Agregue la función estática IsOpen() a la clase MyConnection como se muestra. La función debe regresar verdadero, si hay uno o más objetos creados. Observe como las funciones estáticas son llamadas. |
MyConnection.h |
#pragma once class MyConnection { public: MyConnection(void); ~MyConnection(void); static int count; static bool IsOpen(); }; MyConnection.cpp #include "StdAfx.h" #include "MyConnection.h" int MyConnection::count = 0; MyConnection::MyConnection(void) { count++; } MyConnection::~MyConnection(void) { count--; } bool MyConnection::IsOpen() { return (count>0); } |
Space.cpp |
... void Space::Window_Open(Win::Event& e) { if (MyConnection::IsOpen() == true) tbxOutput.Text += L"1. Open\r\n"; MyConnection x; if (MyConnection::IsOpen() == true) tbxOutput.Text += L"2. Open\r\n"; } |
Tip |
A class with only static member functions must have a private constructor to tell the programmer that an object of this class is not necessary to call the functions. Una clase con solamente funciones miembro estáticas debe tener un constructor privado para indicar al programador que un objeto de esta clase no es necesario para llamar las funciones. |
Tip |
|